import {
  Controller,
  Get,
  Query,
  ParseIntPipe,
  Param,
  Post,
  Body,
  Render,
  Response,
  Request,
  Put,
  Delete,
} from '@nestjs/common';
import { UserService } from './user.service';
// 导入log服务
import { LogService } from '../log/log.service';
import { json } from 'express';

@Controller('user')
export class UserController {
  constructor(
    private readonly logService: LogService,
    private readonly userService: UserService,
  ) {}

  // @Get()

  // hello():string{
  //     this.logService.log('hello控制器')
  //     return 'hello word222'
  // }
  // async userList():Promise<any[]> {
  //     this.logService.log('这里调用了log服务的接口hello')
  //     return await this.userService.userList()
  // }
  // 接口调用

  // 访问方式 http://localhost:3000/user?age=10 获取到的query是一个对象 {age:10}  所有获取的值都是一个对象且值是string
  //  @Get()
  // userList(@Query() query:any):string{
  //     console.log(query);
  //     return '用户列表'

  // }
  // http://localhost:3000/user?name=zhangsan&age=20  将age转化为数字 且输入name age的值  单独获取name和age的值
  // @Get()
  // userList(
  //     @Query('age',new ParseIntPipe()) age:number,
  //     @Query('name') name:string
  // ){
  //     console.log(name,age);
  //     return '用户列表'

  // }

  // resful风格的语法使用@param参数的方式获取
  // 访问链接 http://localhost:3000/user/30  由于接口是基于/user的 所有右面的参数30就表示id=30 输出的值都是字符串
  // @Get(":id")
  // userInfo(@Param() params:any){
  //     console.log(params);
  //     return '用户详情'
  // }
  // 将id格式化为数字类型  http://localhost:3000/user/50
  // @Get(":id")
  // userInfo(@Param('id' ,new ParseIntPipe()) id:number){
  //     console.log(id);
  //     return '用户详情'
  // }

  // 使用Post的方式接受用户传递的参数
  // 使用postman进行测试  接口 http://localhost:3000/user  选择body x-www.form-urlencoded 然抽传递参数 name li age 30
  // @Post()
  // addUser(@Body()body:any){
  //     console.log(body);
  //     return body
  // }
  // 访问 http://localhost:8080/user 默认返回主页2个汉子
  // @Get()
  // index(){
  //     return '主页'
  // }
  // // 访问http://localhost:8080/user/login 相当于访问用户登录页面的时候 需要使用模板引擎去渲染静态页面 login.ejs页面
  // @Get('login')
  // @Render('login')
  // // 返回给login.ejs的数据
  // loginPage(){
  //     return {title:'登录页面'}
  // }
  // //  用户使用 http://localhost:8080/user/login 提交post 请求 获取用户提交的body参数 然后将用户从定向到主页
  // @Post('login')
  // login(@Body() body,  @Response()res){
  //     console.log(body);
  //     res.redirect('/user')

  // }

  // 使用cookie
  // @Get()
  // index(@Request() req){
  //     console.log(req.cookies,'当前的cookie');
  //     return '主页'
  // }
  // @Get('login')
  // login(@Response() res){
  //     // 当用户访问/user/login的时候设置cookie
  //     res.cookie('name','zhangsan',{maxAge:1000*5,httpOnly:true})
  //     res.send('登录页面')
  // }
  // 使用session
  // @Get()
  // index(@Request() req:{[key:string]:any}):string{
  //     console.log(req.session.name);
  //     return '用户主页1111'
  // }
  // @Get('login')
  // login(
  //     @Response() res:{[key:string]:any},
  //     @Request() req:{[key:string]:any}
  // ):void{
  //    req.session.name='hello'
  //    res.send('登录页面222'+req.session.name)

  // }
  // @Get()
  // index(){
  //     return '用户模块 user Modules'
  // }

  // 获取所有用户信息
  @Get()
  @Render('user')
  async index(): Promise<any> {
    // this.logService.log('这里调用了log服务的接口hello')
    let arr = await this.userService.index();
    // console.log(arr, 7788);
    // return JSON.stringify(arr);
    return { arr };
  }
  // 新增用户接口
  @Post()
  async addUser(@Body() body: any, @Response() res) {
    // console.log(body);
    // return body
    let rest = await this.userService.addUser(body);
    // console.log(rest);
    res.send(rest);
    // return res
  }
  //  获取用户信息
  @Get(':id')
  async getSingleUserInfo(
    @Param('id', new ParseIntPipe()) id: number,
    @Response() res,
  ) {
    // console.log(id);
    let rest = await this.userService.getSingleUserInfo(id);
    res.send(`用户的信息是` + JSON.stringify(rest));
  }
  @Put()
  async editUserInfo(@Body() body: any, @Response() res) {
    // console.log(body);
    let userinfo = await this.userService.editUserInfo(body);
    res.send(
      `确定要修改该用户信息?该用户的原信息为${JSON.stringify(
        userinfo,
      )},修改后的信息为${JSON.stringify(body)}`,
    );
  }
  @Delete(':id')
  async delUser(@Param('id', new ParseIntPipe()) id: number) {
    let userinfo = await this.userService.deleteUser(id);
    console.log(userinfo);
    return `确定要删除用户?${userinfo.name}用户ID是${userinfo.id}`;
  }
  // 登录功能
  @Post('login')
  login(@Body() body: any, @Response() res) {
    // console.log(body);
    if (body.username === 'admin' && body.password === '123456') {
      console.log('登录成功');
      res.send(`当前用户是${body.username}`);
      // res.redirect('/user')
    } else {
      //    console.log('请确认用户名密码是否错误');
      res.send('请确认用户名密码是否错误');
    }
  }
}
